#include "DHT11_driver.h"  // DHT11驱动头文件
#include "ohos_init.h"     // OpenHarmony初始化
#include "cmsis_os2.h"     // CMSIS-RTOS2接口
#include "hi_time.h"       // 硬件时间操作
#include <stdio.h>         // 标准输入输出
#include <unistd.h>        // UNIX标准函数

// 全局温湿度变量
double temp = 0;    // 温度值 (浮点数)
double humi = 0;    // 湿度值 (浮点数)
uint8_t tempH = 0;  // 温度整数部分
uint8_t tempL = 0;  // 温度小数部分
uint8_t humiH = 0;  // 湿度整数部分
uint8_t humiL = 0;  // 湿度小数部分

/**
 * @brief DHT11传感器数据读取线程
 * 持续读取并更新温湿度数据
 */
void DHT11_THREAD(void) {
    // 尝试初始化DHT11直到成功
    while (!DHT11_Start()) {
        printf("DHT11 initialization error\n");
        usleep(500000);  // 等待500ms后重试
    }

    // 主循环持续读取数据
    while (1) {
        // 读取原始数据
        DHT11_Read_Data(&tempH, &tempL, &humiH, &humiL);
        
        // 计算浮点温度值 (整数部分 + 小数部分/10)
        temp = tempH + (double)tempL / 10;
        
        // 计算浮点湿度值
        humi = humiH + (double)humiL / 10;
        
        // 等待500ms后读取下一次
        usleep(500000);
    }
}

/**
 * @brief 获取温度整数部分
 * @return 温度整数部分
 */
int DHT11_TempInt(void) {
    return tempH;
}

/**
 * @brief 获取湿度整数部分
 * @return 湿度整数部分
 */
int DHT11_HumiInt(void) {
    return humiH;
}

/**
 * @brief 获取浮点温度值
 * @return 温度值 (浮点数)
 */
double DHT11_Temp(void) {
    return temp;
}

/**
 * @brief 获取浮点湿度值
 * @return 湿度值 (浮点数)
 */
double DHT11_Humidity(void) {
    return humi;
}

/**
 * @brief 创建DHT11读取线程
 * OpenHarmony应用初始化入口
 */
static void DHT11thread(void) {
    // 线程属性配置
    osThreadAttr_t attr = {
        .name = "DHT11_THREAD",     // 线程名称
        .attr_bits = 0U,            // 属性位
        .cb_mem = NULL,             // 控制块内存
        .cb_size = 0U,              // 控制块大小
        .stack_mem = NULL,           // 栈内存
        .stack_size = 1024,          // 栈大小 (1KB)
        .priority = osPriorityNormal1  // 线程优先级
    };

    // 创建DHT11读取线程
    if (osThreadNew((osThreadFunc_t)DHT11_THREAD, NULL, &attr) == NULL) {
        printf("Failed to create DHT11_THREAD!\n");
    }
}

// OpenHarmony应用初始化入口点
APP_FEATURE_INIT(DHT11thread);